home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
lib.exe
/
MEMORY.LIB
< prev
next >
Wrap
Text File
|
1992-02-11
|
4KB
|
326 lines
#IF !LIB4A86
#ELSE
#IF !INTERN_LIB4A86_S
INTERN_LIB4A86_S EQU 01
JMP START
#ENDIF
#ENDIF
MEMORYBLOCKERROR EQU 08101H
INVALIDBLOCKLENGTH EQU 08102H
BLOCKISFREE EQU 08103H
BLOCKBELONGSTODOS EQU 08104H
BLOCKISNOMAINBLOCK EQU 08105H
INVALIDBLOCKNAME EQU 08106H
BLOCKNOTFOUND EQU 08107H
CALCPARAGRAPHS:
PUSH DX
MOV BX,AX
TEST BX,0FH
PUSHF
AND BX,0FFF0H
POPF
IF NZ ADD BX,010H
SHR DX,1
RCR BX,1
SHR DX,1
RCR BX,1
SHR DX,1
RCR BX,1
SHR DX,1
RCR BX,1
POP DX
RET
CALCBYTES:
MOV AX,BX
XOR DX,DX
SHL AX,1
RCL DX,1
SHL AX,1
RCL DX,1
SHL AX,1
RCL DX,1
SHL AX,1
RCL DX,1
RET
SEARCHMEMORYBLOCK:
PUSH SI,DI,DX,BX
CLD
LODSB
OR AL,AL
JNZ >L1
L80:
MOV AX,INVALIDBLOCKNAME
STC
JMP >L90
L1:
CMP AL,8
JA L80
MOV AH,0
MOV DX,AX
JE >L1
MOV BX,AX
MOV [SI+BX],AH
INC DX
L1:
MOV AH,052H
INT 021H
MOV ES,ES:[BX-2]
MOV CX,01
L00:
MOV BX,ES:[01]
MOV AX,ES
INC AX
CMP BX,AX
JNZ >L1
PUSH CX,SI
MOV CX,DX
MOV DI,08
REPE CMPSB
POP SI,CX
JE >L9
L1:
INC CX
CMP B ES:[0],'Z'
JE >L8
CMP B ES:[0],'M'
JNE >L81
ADD AX,ES:[03]
MOV ES,AX
JMP L00
L81:
MOV AX,07H
L8:
STC
L9:
MOV ES,AX
L90:
POP BX,DX,DI,SI
RET
TESTMEMORYBLOCK:
PUSH ES
CALL INTERN_CHECKBLOCKADRESS
POP ES
RET
SETBLOCKNAME:
PUSH DI
MOV DI,OFFSET INTERN_SETNAME
JMP >L1
GETOWNERNAME:
PUSH DI
MOV DI,OFFSET INTERN_GETNAME
MOV B[SI],0
L1:
PUSH ES,SI
XOR BX,BX
CALL INTERN_CHECKBLOCKADRESS
JC >L8
MOV ES,AX
MOV BX,ES:[01]
MOV AX,BLOCKISFREE
OR BX,BX
JE >L8
MOV AX,BLOCKBELONGSTODOS
CMP BX,08H
JE >L8
MOV AX,ES
INC AX
CMP AX,BX
MOV AH,0
JE >L1
DEC BX
MOV ES,BX
INC AH
L1:
XOR BX,BX
CALL DI
JC >L8
MOV AL,AH
JMP >L9
L8:
STC
L9:
POP SI,ES
POP DI
RET
GETUMBLINKSTATUS:
MOV AX,05802H
INT 021H
RET
SETUMBLINKSTATUS:
PUSH BX
AND AX,01H
MOV BX,AX
MOV AX,05803H
INT 021H
POP BX
RET
GETMEMORYSTRATEGY:
MOV AX,05800H
INT 021H
RET
SETMEMORYSTRATEGY:
PUSH BX
MOV BX,AX
MOV AX,05801H
INT 021H
POP BX
RET
GETMEMORYBLOCK:
MOV AX,INVALIDBLOCKLENGTH
OR BX,BX
STC
JZ RET
MOV AH,048H
INT 021H
RET
FREEMEMORYBLOCK:
PUSH ES
CALL INTERN_CHECKBLOCKADRESS
JC >L8
INC AX
MOV ES,AX
MOV AH,049H
INT 021H
L8:
POP ES
RET
SETBLOCKSIZE:
OR BX,BX
JNZ >L1
MOV AX,INVALIDBLOCKLENGTH
STC
RET
L1:
PUSH CX,BX
PUSH BX
CALL GETBLOCKSIZE
POP BX
JC >L8
MOV CX,BX
MOV AH,04AH
INT 021H
JNC >L9
CMP AX,08
JNE >L8
CMP BX,CX
JE >L8
PUSH AX
PUSH BX
MOV BX,CX
MOV AH,04AH
INT 021H
POP BX
POP AX
L8:
STC
L9:
POP BX,CX
RET
GETBLOCKSIZE:
PUSH ES
CALL INTERN_CHECKBLOCKADRESS
JC >L8
MOV ES,AX
MOV BX,ES:[03]
MOV AX,ES:[01]
CMP B ES:[0],'Z'
CLC
L8:
POP ES
RET
INTERN_CHECKBLOCKADRESS:
MOV AX,ES
DEC AX
MOV ES,AX
CMP B ES:[0],'Z'
JE >L9
CMP B ES:[0],'M'
JNE >L8
PUSH AX
ADD AX,ES:[03]
INC AX
MOV ES,AX
POP AX
CMP B ES:[0],'M'
JE >L9
CMP B ES:[0],'Z'
JE >L9
L8:
STC
MOV AX,MEMORYBLOCKERROR
L9:
RET
INTERN_GETNAME:
PUSH SI
L0:
MOV AL,ES:[BX]+08
OR AL,AL
JZ >L1
INC SI
MOV [SI],AL
INC BX
CMP BL,08
JB L0
L1:
POP SI
MOV B[SI],BL
CLC
RET
INTERN_SETNAME:
OR AH,AH
JZ >L1
MOV AX,BLOCKISNOMAINBLOCK
STC
RET
L1:
PUSHF
PUSH CX
CLD
LODSB
MOV CL,AL
XOR CH,CH
CMP CL,08
IF A MOV CL,8
JCXZ >L1
L0:
LODSB
MOV ES:[BX]+08,AL
INC BX
LOOP L0
L1:
CMP BL,08
IF B MOV B ES:[BX]+08,0
POP CX
POPF
RET
#IF !INTERN_CMARK0
INTERN_CMARK0 EQU 01H
INTERN_CMARK1:
PUSH BP
MOV BP,SP
MOV BX,06H
SUB CH,[BP+SI]
SUB AH,[BX+SI]
DEC SP
DEC CX
INC DX
XOR AL,041H
CMP B[02820H],DH
INC BX
SUB W[BX+SI],SP
INC DX
CS AND B[BP+DI+043H],DL
DEC AX
INC BP
DEC BP
DEC BP
INC BP
PUSH DX
AND B[BP+SI],CH
SUB CH,[BP+SI]
POP DX
MOV SP,BP
POP BP
RET
#ENDIF